package main

import (
	"fmt"
)

// interface{}表示可以接口任何类型，...省略号表示参数个数不固定
func mprint(s ...interface{}) {
	fmt.Println(s)
	for _, v := range s {
		fmt.Println(v)
	}
}

func mprint2(s []interface{}) {
	for _, v := range s {
		fmt.Println(v)
	}
}
func main() {
	//1、定义interface类型(里面的元素可以是任何类型)的slice传入
	var slice1 = []interface{}{1, 2, 3, "boye", 5, 6, 7, 8, 9, 10}
	//...表示将slice打散一个一个传入
	mprint(slice1...)

	//2、定义其他类型的slice
	names := []string{"stanley", "david", "oscar"}
	//int2 := []int{1, 2, 3}
	//mprint(names...) //采用定义的string类型的slice打散传入会报错，其他的不会
	//mprint2(names)
	//想要打散传入可以先转为[]interface{}
	var data1 []interface{}
	for _, i := range names {
		data1 = append(data1, i)
	}
	mprint(data1)
	//总结：[]string 不能转化为作为[]interface{}
}
